﻿namespace 日志的使用.自定义的内容.托管服务
{
    /// <summary>
    /// 基本使用
    /// </summary>
    public class SelfHostedService : IHostedService
    {
        private Timer? timer = null;
        private int? number;
        //主程序启动后触发-最先触发
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            Console.WriteLine("SelfHostedService-StartAsync-Invoke");
            await Task.Delay(1000);
            var mytype = number?.GetType(); //表示 if(null != number) number.GetType(),因此方便了许多
            // 每5秒执行一次DoWork方法
            timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
        }

        //主程序正常关闭时触发,如果是意外关闭则不会被触发
        public async Task StopAsync(CancellationToken cancellationToken)
        {
            Console.WriteLine("SelfHostedService-StopAsync-Invoke");
            timer?.Change(Timeout.Infinite, 0);
            //Change的第一个参数意义是当Timer每一次触发执行回调前需要等待的时间，0表示立即触发，Infinite则表示永不触发回调；第二个参数表示每次触发timer的间隔时间，0表示只执行一次即第一次。
            await Task.Delay(1000);
        }

        public void DoWork(object? state)
        {
            Console.WriteLine("DoWork 执行了！！");
        }
    }
}
